page.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. "use client";
  2. import { useRouter } from "next/navigation";
  3. import { useI18n } from "locales/client";
  4. import { WorkoutSessionList } from "@/features/workout-session/ui/workout-session-list";
  5. import { WorkoutSessionHeatmap } from "@/features/workout-session/ui/workout-session-heatmap";
  6. import { useWorkoutSessions } from "@/features/workout-session/model/use-workout-sessions";
  7. import { useCurrentSession } from "@/entities/user/model/useCurrentSession";
  8. import { LocalAlert } from "@/components/ui/local-alert";
  9. import { Button } from "@/components/ui/button";
  10. export default function ProfilePage() {
  11. const router = useRouter();
  12. const t = useI18n();
  13. const { data: sessions = [] } = useWorkoutSessions();
  14. const session = useCurrentSession();
  15. const values: Record<string, number> = {};
  16. sessions.forEach((session) => {
  17. const date = session.startedAt.slice(0, 10);
  18. values[date] = (values[date] || 0) + 1;
  19. });
  20. const until =
  21. sessions.length > 0
  22. ? sessions.reduce((max, s) => (s.startedAt > max ? s.startedAt : max), sessions[0].startedAt).slice(0, 10)
  23. : new Date().toISOString().slice(0, 10);
  24. return (
  25. <div className="px-2 sm:px-6">
  26. {!session && <LocalAlert className="my-4" />}
  27. {session && (
  28. <div className="mt-4">
  29. <div>
  30. <h2 className="text-2xl font-bold">Hello, {session.user?.name} 👋</h2>
  31. </div>
  32. </div>
  33. )}
  34. <div className="mt-4">
  35. <WorkoutSessionHeatmap until={until} values={values} />
  36. </div>
  37. <WorkoutSessionList />
  38. <div className="mt-8 flex justify-center">
  39. <Button onClick={() => router.push("/")} size="large">
  40. {t("profile.new_workout")}
  41. </Button>
  42. </div>
  43. </div>
  44. );
  45. }